# -*- coding: utf-8 -*-
# @Time    : 2024/6/5 16:50
# @Author  : yujiahao
# @File    : 03_for_while.py
# @description:Python的循环语句和关键字的使用
"""
Python、Java 和 Scala 循环示例对比:

Python 循环示例:

    1. for 循环
        for 变量 in 可迭代对象:
            # 代码块
        示例:
        numbers = [1, 2, 3, 4, 5]
        for number in numbers:
            print(number)

    2. while 循环
        while 条件:
            # 代码块
        示例:
        count = 0
        while count < 5:
            print(count)
            count += 1

    3.while else

        while True:
            if 3 > 2:
                print('你好')
                break
        else:
            print('不好')

    4. break 关键字
        # 提前退出循环
        示例:
        for number in range(5):
            if number == 3:
                break
            print(number)

    5. continue 关键字
        # 跳过当前迭代并继续下一次迭代
        示例:
        for number in range(5):
            if number == 3:
                continue
            print(number)


Java 循环示例:

    1. 传统 for 循环
        for (初始化; 条件; 更新) {
            // 代码块
        }
        示例:
        for (int i = 0; i < 5; i++) {
            System.out.println(i);
        }

    2. 增强的 for-each 循环
        for (类型 变量 : 数组) {
            // 代码块
        }
        示例:
        int[] numbers = {1, 2, 3, 4, 5};
        for (int number : numbers) {
            System.out.println(number);
        }

    3. while 循环
        while (条件) {
            // 代码块
        }
        示例:
        int count = 0;
        while (count < 5) {
            System.out.println(count);
            count++;
        }

    4. do-while 循环
        do {
            // 代码块
        } while (条件);
        示例:
        int count = 0;
        do {
            System.out.println(count);
            count++;
        } while (count < 5);

    5. break 关键字
        # 提前退出循环
        示例:
        for (int i = 0; i < 5; i++) {
            if (i == 3) {
                break;
            }
            System.out.println(i);
        }

    6. continue 关键字
        # 跳过当前迭代并继续下一次迭代
        示例:
        for (int i = 0; i < 5; i++) {
            if (i == 3) {
                continue;
            }
            System.out.println(i);
        }


Scala 循环示例:

    1. for 循环
        for (变量 <- 集合) {
            // 代码块
        }
        示例:
        val numbers = Array(1, 2, 3, 4, 5)
        for (number <- numbers) {
            println(number)
        }

    2. for 推导式
        val 新集合 = for (变量 <- 集合) yield {
            // 代码块
        }
        示例:
        val doubledNumbers = for (number <- numbers) yield number * 2
        println(doubledNumbers.mkString(", "))

    3. while 循环
        while (条件) {
            // 代码块
        }
        示例:
        var count = 0
        while (count < 5) {
            println(count)
            count += 1

    4. Breaks 关键字
        # 提前退出循环
        # Scala 中没有直接的 break 关键字，但可以使用 Breaks 对象来实现类似功能
        示例:
        import scala.util.control.Breaks._
        breakable {
            for (i <- 0 until 5) {
                if (i == 3) {
                    break
                }
                println(i)
            }
        }

    5. continue 关键字
        # 跳过当前迭代并继续下一次迭代
        # Scala 中没有直接的 continue 关键字，但可以通过条件判断和 if 表达式来实现类似功能
        示例:
        for (i <- 0 until 5 if i != 3) {
            println(i)
        }
"""


# 继续前面的小游戏，增加循环

# todo 1、使用while
while True:
    # 从控制台接受输入，并将字符串类型的数字转换成int
    guess = int(input("不妨猜一下豪哥现在心里想的是哪个数字，输入0有提示: "))

    if guess == 8:
        print("你是豪哥心里的蛔虫吗？！")
        print("哼，猜中了也没有奖励 ")
        break
    elif 1 <= guess < 8:
        print("猜小了，再试一次吧！")
        continue
    elif 8 < guess <= 30:
        print("猜大了，再试一次吧！")
        continue
    elif 30 < guess <= 60:
        print("我比30小，再试一次吧！")
        continue
    elif 60 < guess <= 100:
        print("我比60小，再试一次吧！")
        continue
    elif  guess > 100:
        print("我比100小，再试一次吧！")
        continue
    else:
        print("猜错啦，提示一下，豪哥心里现在想的是8！")
        continue

print("游戏结束，不玩啦(#^.^#)")






# todo 2、while else

'''
做一个用户登录系统要求如下：
    首先让用户输入序号选择格式如下:
    0.退出
    1.开始登录
    如果用户选择序号0 就提示用户退出成功
    如果用户选择序号1就让用户输入用户名密码然后进行判断,正确就终止循环,错误重新输入
'''

# 预设的用户名和密码
correct_username = "yujiahao"
correct_password = "123456"
# 只要一直循环直到满足条件退出这里思路先无脑死循环+满足条件退出break，负责继续
while True:
    # 提示用户选择操作
    print("请选择操作:")
    print("0. 退出")
    print("1. 开始登录")

    # 获取用户输入的选择
    choice = input("请输入序号: ")

    if choice == '0':
        print("退出成功")
        break
    elif choice == '1':
        # 用户选择登录，提示输入用户名和密码
        username = input("请输入用户名: ")
        password = input("请输入密码: ")

        # 判断用户名和密码是否正确
        if username == correct_username and password == correct_password:
            print("登录成功")
            break
        else:
            print("用户名或密码错误，请重新输入")
    else:
        print("无效的选择，请输入0或1")
else:
    # 如果while循环正常结束（没有被break退出），则执行else分支
    print("循环正常结束")

print("程序结束")

print("-------------------while---------------------------☆☆☆分割线☆☆☆-----------------------for------------------")

#todo 3、 使用 for做死循环

# 目标数字
target = 8

# 最大猜测次数
max_attempts = 5

# 初始化计数器
attempts = 0

# 使用for循环限制猜测次数
for _ in range(max_attempts):
    # 从控制台接受输入，并将字符串类型的数字转换成int
    guess = int(input("不妨猜一下豪哥现在心里想的是哪个数字: "))

    # 每次猜测计数器加1
    attempts += 1
    changs = max_attempts - attempts
    if guess == target:
        print("你是豪哥心里的蛔虫吗？！")
        print("哼，猜中了也没有奖励 ")
        break
    elif 1 <= guess < target:
        print(f"猜小了，再试一次吧！你还有 {changs} 次机会")
    elif target < guess <= 100:
        print(f"猜大了，再试一次吧！你还有 {changs} 次机会")
    else:
        print("请输入一个1到100之间的数字。")
else:
    # 如果for循环正常结束（没有被break退出），则执行else分支
    print(f"很遗憾，你没有在{max_attempts}次机会内猜中目标数字。")

print("游戏结束，不玩啦(#^.^#)")


